import ctypes


class ANDORCAPS(ctypes.Structure):
    _fields_ = [
        ("ulSize", ctypes.c_ulong),
        ("ulAcqModes", ctypes.c_ulong),
        ("ulReadModes", ctypes.c_ulong),
        ("ulTriggerModes", ctypes.c_ulong),
        ("ulCameraType", ctypes.c_ulong),
        ("ulPixelMode", ctypes.c_ulong),
        ("ulSetFunctions", ctypes.c_ulong),
        ("ulGetFunctions", ctypes.c_ulong),
        ("ulFeatures", ctypes.c_ulong),
        ("ulPCICard", ctypes.c_ulong),
        ("ulEMGainCapability", ctypes.c_ulong),
        ("ulFTReadModes", ctypes.c_ulong),
        ("ulFeatures2", ctypes.c_ulong),
    ]


class EmccdDll(ctypes.WinDLL):
    def __init__(self, dll_path: str):
        super().__init__(dll_path)
        
        self.AbortAcquisition.argtypes=[]
        self.AbortAcquisition.restype = ctypes.c_uint
        
        self.CancelWait.argtypes=[]
        self.CancelWait.restype = ctypes.c_uint
        
        self.CoolerOFF.argtypes=[]
        self.CoolerOFF.restype = ctypes.c_uint
        
        self.CoolerON.argtypes=[]
        self.CoolerON.restype = ctypes.c_uint
        
        self.DemosaicImage.restype = ctypes.c_uint
        
        self.EnableKeepCleans.argtypes=[ctypes.c_int]
        self.EnableKeepCleans.restype = ctypes.c_uint
        
        self.EnableSensorCompensation.argtypes=[ctypes.c_int]
        self.EnableSensorCompensation.restype = ctypes.c_uint
        
        self.SetIRIGModulation.restype = ctypes.c_uint
        
        self.FreeInternalMemory.argtypes=[]
        self.FreeInternalMemory.restype = ctypes.c_uint
        
        self.GetAcquiredData.restype = ctypes.c_uint
        
        self.GetAcquiredData16.restype = ctypes.c_uint
        
        self.GetAcquiredFloatData.restype = ctypes.c_uint
        
        self.GetAcquisitionProgress.restype = ctypes.c_uint
        
        self.GetAcquisitionTimings.restype = ctypes.c_uint
        
        self.GetAdjustedRingExposureTimes.restype = ctypes.c_uint
        
        self.GetAllDMAData.restype = ctypes.c_uint
        
        self.GetAmpDesc.restype = ctypes.c_uint
        
        self.GetAmpMaxSpeed.restype = ctypes.c_uint
        
        self.GetAvailableCameras.restype = ctypes.c_uint
        
        self.GetBackground.restype = ctypes.c_uint
        
        self.GetBaselineClamp.restype = ctypes.c_uint
        
        self.GetBitDepth.restype = ctypes.c_uint
        
        self.GetBitsPerPixel.restype = ctypes.c_uint
        
        self.GetCameraEventStatus.restype = ctypes.c_uint
        
        self.GetCameraHandle.restype = ctypes.c_uint
        
        self.GetCameraInformation.restype = ctypes.c_uint
        
        self.GetCameraSerialNumber.restype = ctypes.c_uint
        
        self.GetCapabilities.restype = ctypes.c_uint
        
        self.GetControllerCardModel.restype = ctypes.c_uint
        
        self.GetCountConvertWavelengthRange.restype = ctypes.c_uint
        
        self.GetCurrentCamera.restype = ctypes.c_uint
        
        self.GetCYMGShift.restype = ctypes.c_uint
        
        self.GetDDGExternalOutputEnabled.restype = ctypes.c_uint
        
        self.GetDDGExternalOutputPolarity.restype = ctypes.c_uint
        
        self.GetDDGExternalOutputStepEnabled.restype = ctypes.c_uint
        
        self.GetDDGExternalOutputTime.restype = ctypes.c_uint
        
        self.GetDDGTTLGateWidth.restype = ctypes.c_uint
        
        self.GetDDGGateTime.restype = ctypes.c_uint
        
        self.GetDDGInsertionDelay.restype = ctypes.c_uint
        
        self.GetDDGIntelligate.restype = ctypes.c_uint
        
        self.GetDDGIOC.restype = ctypes.c_uint
        
        self.GetDDGIOCFrequency.restype = ctypes.c_uint
        
        self.GetDDGIOCNumber.restype = ctypes.c_uint
        
        self.GetDDGIOCNumberRequested.restype = ctypes.c_uint
        
        self.GetDDGIOCPeriod.restype = ctypes.c_uint
        
        self.GetDDGIOCPulses.restype = ctypes.c_uint
        
        self.GetDDGIOCTrigger.restype = ctypes.c_uint
        
        self.GetDDGOpticalWidthEnabled.restype = ctypes.c_uint
        
        self.GetDDGLiteControlByte.restype = ctypes.c_uint
        
        self.GetDDGLiteInitialDelay.restype = ctypes.c_uint
        
        self.GetDDGLitePulseWidth.restype = ctypes.c_uint
        
        self.GetDDGLiteInterPulseDelay.restype = ctypes.c_uint
        
        self.GetDDGLitePulsesPerExposure.restype = ctypes.c_uint
        
        self.GetDDGPulse.restype = ctypes.c_uint
        
        self.GetDDGStepCoefficients.restype = ctypes.c_uint
        
        self.GetDDGWidthStepCoefficients.restype = ctypes.c_uint
        
        self.GetDDGStepMode.restype = ctypes.c_uint
        
        self.GetDDGWidthStepMode.restype = ctypes.c_uint
        
        self.GetDetector.restype = ctypes.c_uint
        
        self.GetDICameraInfo.restype = ctypes.c_uint
        
        self.GetEMAdvanced.restype = ctypes.c_uint
        
        self.GetEMCCDGain.restype = ctypes.c_uint
        
        self.GetEMGainRange.restype = ctypes.c_uint
        
        self.GetESDEventStatus.restype = ctypes.c_uint
        
        self.GetExternalTriggerTermination.restype = ctypes.c_uint
        
        self.GetFastestRecommendedVSSpeed.restype = ctypes.c_uint
        
        self.GetFIFOUsage.restype = ctypes.c_uint
        
        self.GetFilterMode.restype = ctypes.c_uint
        
        self.GetFKExposureTime.restype = ctypes.c_uint
        
        self.GetFKVShiftSpeed.restype = ctypes.c_uint
        
        self.GetFKVShiftSpeedF.restype = ctypes.c_uint
        
        self.GetFrontEndStatus.restype = ctypes.c_uint
        
        self.GetGateMode.restype = ctypes.c_uint
        
        self.GetHardwareVersion.restype = ctypes.c_uint
        
        self.GetHeadModel.restype = ctypes.c_uint
        
        self.GetHorizontalSpeed.restype = ctypes.c_uint
        
        self.GetHSSpeed.restype = ctypes.c_uint
        
        self.GetHVflag.restype = ctypes.c_uint
        
        self.GetID.restype = ctypes.c_uint
        
        self.GetImageFlip.restype = ctypes.c_uint
        
        self.GetImageRotate.restype = ctypes.c_uint
        
        self.GetImages.restype = ctypes.c_uint
        
        self.GetImages16.restype = ctypes.c_uint
        
        self.GetImagesPerDMA.restype = ctypes.c_uint
        
        self.GetIRQ.restype = ctypes.c_uint
        
        self.GetKeepCleanTime.restype = ctypes.c_uint
        
        self.GetMaximumBinning.restype = ctypes.c_uint
        
        self.GetMaximumExposure.restype = ctypes.c_uint
        
        self.GetMaximumNumberRingExposureTimes.restype = ctypes.c_uint
        
        self.GetMCPGain.restype = ctypes.c_uint
        
        self.GetMCPGainRange.restype = ctypes.c_uint
        
        self.GetMCPGainTable.restype = ctypes.c_uint
        
        self.GetMCPVoltage.restype = ctypes.c_uint
        
        self.GetMinimumImageLength.restype = ctypes.c_uint
        
        self.GetMinimumNumberInSeries.restype = ctypes.c_uint
        
        self.GetMostRecentColorImage16.restype = ctypes.c_uint
        
        self.GetMostRecentImage.restype = ctypes.c_uint
        
        self.GetMostRecentImage16.restype = ctypes.c_uint
        
        self.GetMSTimingsData.restype = ctypes.c_uint
        
        self.GetMetaDataInfo.restype = ctypes.c_uint
        
        self.GetMSTimingsEnabled.argtypes=[]
        self.GetMSTimingsEnabled.restype = ctypes.c_uint
        
        self.GetNewData.restype = ctypes.c_uint
        
        self.GetNewData16.restype = ctypes.c_uint
        
        self.GetNewData8.restype = ctypes.c_uint
        
        self.GetNewFloatData.restype = ctypes.c_uint
        
        self.GetNumberADChannels.restype = ctypes.c_uint
        
        self.GetNumberAmp.restype = ctypes.c_uint
        
        self.GetNumberAvailableImages.restype = ctypes.c_uint
        
        self.GetNumberDDGExternalOutputs.restype = ctypes.c_uint
        
        self.GetNumberDevices.restype = ctypes.c_uint
        
        self.GetNumberFKVShiftSpeeds.restype = ctypes.c_uint
        
        self.GetNumberHorizontalSpeeds.restype = ctypes.c_uint
        
        self.GetNumberHSSpeeds.restype = ctypes.c_uint
        
        self.GetNumberMissedExternalTriggers.restype = ctypes.c_uint
        
        self.GetIRIGData.restype = ctypes.c_uint
        
        self.GetMetaData.restype = ctypes.c_uint
        
        self.GetNumberNewImages.restype = ctypes.c_uint
        
        self.GetNumberPhotonCountingDivisions.restype = ctypes.c_uint
        
        self.GetNumberPreAmpGains.restype = ctypes.c_uint
        
        self.GetNumberRingExposureTimes.restype = ctypes.c_uint
        
        self.GetNumberIO.restype = ctypes.c_uint
        
        self.GetNumberVerticalSpeeds.restype = ctypes.c_uint
        
        self.GetNumberVSAmplitudes.restype = ctypes.c_uint
        
        self.GetNumberVSSpeeds.restype = ctypes.c_uint
        
        self.GetOldestImage.restype = ctypes.c_uint
        
        self.GetOldestImage16.restype = ctypes.c_uint
        
        self.GetPhosphorStatus.restype = ctypes.c_uint
        
        self.GetPhysicalDMAAddress.restype = ctypes.c_uint
        
        self.GetPixelSize.restype = ctypes.c_uint
        
        self.GetPreAmpGain.restype = ctypes.c_uint
        
        self.GetPreAmpGainText.restype = ctypes.c_uint
        
        self.GetCurrentPreAmpGain.restype = ctypes.c_uint
        
        self.GetDualExposureTimes.restype = ctypes.c_uint
        
        self.GetQE.restype = ctypes.c_uint
        
        self.GetReadOutTime.restype = ctypes.c_uint
        
        self.GetRegisterDump.restype = ctypes.c_uint
        
        self.GetRelativeImageTimes.restype = ctypes.c_uint
        
        self.GetRingExposureRange.restype = ctypes.c_uint
        
        self.GetSDK3Handle.restype = ctypes.c_uint
        
        self.GetSensitivity.restype = ctypes.c_uint
        
        self.GetShutterMinTimes.restype = ctypes.c_uint
        
        self.GetSizeOfCircularBuffer.restype = ctypes.c_uint
        
        self.GetSlotBusDeviceFunction.restype = ctypes.c_uint
        
        self.GetSoftwareVersion.restype = ctypes.c_uint
        
        self.GetSpoolProgress.restype = ctypes.c_uint
        
        self.GetStartUpTime.restype = ctypes.c_uint
        
        self.GetStatus.restype = ctypes.c_uint
        
        self.GetTECStatus.restype = ctypes.c_uint
        
        self.GetTemperature.restype = ctypes.c_uint
        
        self.GetTemperatureF.restype = ctypes.c_uint
        
        self.GetTemperatureRange.restype = ctypes.c_uint
        
        self.GetTemperaturePrecision.restype = ctypes.c_uint
        
        self.GetTemperatureStatus.restype = ctypes.c_uint
        
        self.GetTotalNumberImagesAcquired.restype = ctypes.c_uint
        
        self.GetIODirection.restype = ctypes.c_uint
        
        self.GetIOLevel.restype = ctypes.c_uint
        
        self.GetUSBDeviceDetails.restype = ctypes.c_uint
        
        self.GetVersionInfo.restype = ctypes.c_uint
        
        self.GetVerticalSpeed.restype = ctypes.c_uint
        
        self.GetVirtualDMAAddress.restype = ctypes.c_uint
        
        self.GetVSAmplitudeString.restype = ctypes.c_uint
        
        self.GetVSAmplitudeFromString.restype = ctypes.c_uint
        
        self.GetVSAmplitudeValue.restype = ctypes.c_uint
        
        self.GetVSSpeed.restype = ctypes.c_uint
        
        self.GPIBReceive.restype = ctypes.c_uint
        
        self.GPIBSend.restype = ctypes.c_uint
        
        self.I2CBurstRead.restype = ctypes.c_uint
        
        self.I2CBurstWrite.restype = ctypes.c_uint
        
        self.I2CRead.restype = ctypes.c_uint
        
        self.I2CReset.argtypes=[]
        self.I2CReset.restype = ctypes.c_uint
        
        self.I2CWrite.argtypes=[ctypes.c_byte, ctypes.c_byte, ctypes.c_byte]
        self.I2CWrite.restype = ctypes.c_uint
        
        self.IdAndorDll.argtypes=[]
        self.IdAndorDll.restype = ctypes.c_uint
        
        self.InAuxPort.restype = ctypes.c_uint
        
        self.Initialize.restype = ctypes.c_uint
        
        self.InitializeDevice.restype = ctypes.c_uint
        
        self.IsAmplifierAvailable.argtypes=[ctypes.c_int]
        self.IsAmplifierAvailable.restype = ctypes.c_uint
        
        self.IsCoolerOn.restype = ctypes.c_uint
        
        self.IsCountConvertModeAvailable.argtypes=[ctypes.c_int]
        self.IsCountConvertModeAvailable.restype = ctypes.c_uint
        
        self.IsInternalMechanicalShutter.restype = ctypes.c_uint
        
        self.IsPreAmpGainAvailable.restype = ctypes.c_uint
        
        self.IsReadoutFlippedByAmplifier.restype = ctypes.c_uint
        
        self.IsTriggerModeAvailable.argtypes=[ctypes.c_int]
        self.IsTriggerModeAvailable.restype = ctypes.c_uint
        
        self.Merge.restype = ctypes.c_uint
        
        self.OutAuxPort.argtypes=[ctypes.c_int, ctypes.c_int]
        self.OutAuxPort.restype = ctypes.c_uint
        
        self.PrepareAcquisition.argtypes=[]
        self.PrepareAcquisition.restype = ctypes.c_uint
        
        self.SaveAsBmp.restype = ctypes.c_uint
        
        self.SaveAsCalibratedSif.restype = ctypes.c_uint
        
        self.SaveAsCommentedSif.restype = ctypes.c_uint
        
        self.SaveAsEDF.restype = ctypes.c_uint
        
        self.SaveAsFITS.restype = ctypes.c_uint
        
        self.SaveAsRaw.restype = ctypes.c_uint
        
        self.SaveAsSif.restype = ctypes.c_uint
        
        self.SaveAsSPC.restype = ctypes.c_uint
        
        self.SaveAsTiff.restype = ctypes.c_uint
        
        self.SaveAsTiffEx.restype = ctypes.c_uint
        
        self.SaveEEPROMToFile.restype = ctypes.c_uint
        
        self.SaveToClipBoard.restype = ctypes.c_uint
        
        self.SelectDevice.argtypes=[ctypes.c_int]
        self.SelectDevice.restype = ctypes.c_uint
        
        self.SendSoftwareTrigger.argtypes=[]
        self.SendSoftwareTrigger.restype = ctypes.c_uint
        
        self.SetAccumulationCycleTime.argtypes=[ctypes.c_float]
        self.SetAccumulationCycleTime.restype = ctypes.c_uint
        
        self.SetAcqStatusEvent.restype = ctypes.c_uint
        
        self.SetAcquisitionMode.argtypes=[ctypes.c_int]
        self.SetAcquisitionMode.restype = ctypes.c_uint
        
        self.SetSensorPortMode.argtypes=[ctypes.c_int]
        self.SetSensorPortMode.restype = ctypes.c_uint
        
        self.SelectSensorPort.argtypes=[ctypes.c_int]
        self.SelectSensorPort.restype = ctypes.c_uint
        
        self.SetSizeOfCircularBufferMegaBytes.argtypes=[ctypes.c_ulong]
        self.SetSizeOfCircularBufferMegaBytes.restype = ctypes.c_uint
        
        self.SelectDualSensorPort.argtypes=[ctypes.c_int]
        self.SelectDualSensorPort.restype = ctypes.c_uint
        
        self.SetAcquisitionType.argtypes=[ctypes.c_int]
        self.SetAcquisitionType.restype = ctypes.c_uint
        
        self.SetADChannel.argtypes=[ctypes.c_int]
        self.SetADChannel.restype = ctypes.c_uint
        
        self.SetAdvancedTriggerModeState.argtypes=[ctypes.c_int]
        self.SetAdvancedTriggerModeState.restype = ctypes.c_uint
        
        self.SetBackground.restype = ctypes.c_uint
        
        self.SetBaselineClamp.argtypes=[ctypes.c_int]
        self.SetBaselineClamp.restype = ctypes.c_uint
        
        self.SetBaselineOffset.argtypes=[ctypes.c_int]
        self.SetBaselineOffset.restype = ctypes.c_uint
        
        self.SetBitsPerPixel.argtypes=[ctypes.c_int]
        self.SetBitsPerPixel.restype = ctypes.c_uint
        
        self.SetCameraLinkMode.argtypes=[ctypes.c_int]
        self.SetCameraLinkMode.restype = ctypes.c_uint
        
        self.SetCameraStatusEnable.argtypes=[ctypes.c_ulong]
        self.SetCameraStatusEnable.restype = ctypes.c_uint
        
        self.SetChargeShifting.argtypes=[ctypes.c_uint, ctypes.c_uint]
        self.SetChargeShifting.restype = ctypes.c_uint
        
        self.SetComplexImage.restype = ctypes.c_uint
        
        self.SetCoolerMode.argtypes=[ctypes.c_int]
        self.SetCoolerMode.restype = ctypes.c_uint
        
        self.SetCountConvertMode.argtypes=[ctypes.c_int]
        self.SetCountConvertMode.restype = ctypes.c_uint
        
        self.SetCountConvertWavelength.argtypes=[ctypes.c_float]
        self.SetCountConvertWavelength.restype = ctypes.c_uint
        
        self.SetCropMode.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetCropMode.restype = ctypes.c_uint
        
        self.SetCurrentCamera.argtypes=[ctypes.c_long]
        self.SetCurrentCamera.restype = ctypes.c_uint
        
        self.SetCustomTrackHBin.argtypes=[ctypes.c_int]
        self.SetCustomTrackHBin.restype = ctypes.c_uint
        
        self.SetDataType.argtypes=[ctypes.c_int]
        self.SetDataType.restype = ctypes.c_uint
        
        self.SetDACOutput.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetDACOutput.restype = ctypes.c_uint
        
        self.SetDACOutputScale.argtypes=[ctypes.c_int]
        self.SetDACOutputScale.restype = ctypes.c_uint
        
        self.SetDDGAddress.argtypes=[ctypes.c_byte, ctypes.c_byte, ctypes.c_byte, ctypes.c_byte, ctypes.c_byte]
        self.SetDDGAddress.restype = ctypes.c_uint
        
        self.SetDDGExternalOutputEnabled.argtypes=[ctypes.c_uint32, ctypes.c_uint32]
        self.SetDDGExternalOutputEnabled.restype = ctypes.c_uint
        
        self.SetDDGExternalOutputPolarity.argtypes=[ctypes.c_uint32, ctypes.c_uint32]
        self.SetDDGExternalOutputPolarity.restype = ctypes.c_uint
        
        self.SetDDGExternalOutputStepEnabled.argtypes=[ctypes.c_uint32, ctypes.c_uint32]
        self.SetDDGExternalOutputStepEnabled.restype = ctypes.c_uint
        
        self.SetDDGExternalOutputTime.argtypes=[ctypes.c_uint32, ctypes.c_uint64, ctypes.c_uint64]
        self.SetDDGExternalOutputTime.restype = ctypes.c_uint
        
        self.SetDDGGain.argtypes=[ctypes.c_int]
        self.SetDDGGain.restype = ctypes.c_uint
        
        self.SetDDGGateStep.argtypes=[ctypes.c_float]
        self.SetDDGGateStep.restype = ctypes.c_uint
        
        self.SetDDGGateTime.argtypes=[ctypes.c_uint64, ctypes.c_uint64]
        self.SetDDGGateTime.restype = ctypes.c_uint
        
        self.SetDDGInsertionDelay.argtypes=[ctypes.c_int]
        self.SetDDGInsertionDelay.restype = ctypes.c_uint
        
        self.SetDDGIntelligate.argtypes=[ctypes.c_int]
        self.SetDDGIntelligate.restype = ctypes.c_uint
        
        self.SetDDGIOC.argtypes=[ctypes.c_int]
        self.SetDDGIOC.restype = ctypes.c_uint
        
        self.SetDDGIOCFrequency.argtypes=[ctypes.c_float]
        self.SetDDGIOCFrequency.restype = ctypes.c_uint
        
        self.SetDDGIOCNumber.argtypes=[ctypes.c_ulong]
        self.SetDDGIOCNumber.restype = ctypes.c_uint
        
        self.SetDDGIOCPeriod.argtypes=[ctypes.c_uint64]
        self.SetDDGIOCPeriod.restype = ctypes.c_uint
        
        self.SetDDGIOCTrigger.argtypes=[ctypes.c_uint32]
        self.SetDDGIOCTrigger.restype = ctypes.c_uint
        
        self.SetDDGOpticalWidthEnabled.argtypes=[ctypes.c_uint32]
        self.SetDDGOpticalWidthEnabled.restype = ctypes.c_uint
        
        self.SetDDGLiteControlByte.restype = ctypes.c_uint
        
        self.SetDDGLiteInitialDelay.restype = ctypes.c_uint
        
        self.SetDDGLitePulseWidth.restype = ctypes.c_uint
        
        self.SetDDGLiteInterPulseDelay.restype = ctypes.c_uint
        
        self.SetDDGLitePulsesPerExposure.restype = ctypes.c_uint
        
        self.SetDDGStepCoefficients.argtypes=[ctypes.c_uint32, ctypes.c_float, ctypes.c_float]
        self.SetDDGStepCoefficients.restype = ctypes.c_uint
        
        self.SetDDGWidthStepCoefficients.argtypes=[ctypes.c_uint32, ctypes.c_float, ctypes.c_float]
        self.SetDDGWidthStepCoefficients.restype = ctypes.c_uint
        
        self.SetDDGStepMode.argtypes=[ctypes.c_uint32]
        self.SetDDGStepMode.restype = ctypes.c_uint
        
        self.SetDDGWidthStepMode.argtypes=[ctypes.c_uint32]
        self.SetDDGWidthStepMode.restype = ctypes.c_uint
        
        self.SetDDGTimes.argtypes=[ctypes.c_float, ctypes.c_float, ctypes.c_float]
        self.SetDDGTimes.restype = ctypes.c_uint
        
        self.SetDDGTriggerMode.argtypes=[ctypes.c_int]
        self.SetDDGTriggerMode.restype = ctypes.c_uint
        
        self.SetDDGVariableGateStep.argtypes=[ctypes.c_int, ctypes.c_float, ctypes.c_float]
        self.SetDDGVariableGateStep.restype = ctypes.c_uint
        
        self.SetDelayGenerator.restype = ctypes.c_uint
        
        self.SetDMAParameters.argtypes=[ctypes.c_int, ctypes.c_float]
        self.SetDMAParameters.restype = ctypes.c_uint
        
        self.SetDriverEvent.restype = ctypes.c_uint
        
        self.SetESDEvent.restype = ctypes.c_uint
        
        self.SetEMAdvanced.argtypes=[ctypes.c_int]
        self.SetEMAdvanced.restype = ctypes.c_uint
        
        self.SetEMCCDGain.argtypes=[ctypes.c_int]
        self.SetEMCCDGain.restype = ctypes.c_uint
        
        self.SetEMClockCompensation.argtypes=[ctypes.c_int]
        self.SetEMClockCompensation.restype = ctypes.c_uint
        
        self.SetEMGainMode.argtypes=[ctypes.c_int]
        self.SetEMGainMode.restype = ctypes.c_uint
        
        self.SetExposureTime.argtypes=[ctypes.c_float]
        self.SetExposureTime.restype = ctypes.c_uint
        
        self.SetExternalTriggerTermination.argtypes=[ctypes.c_uint32]
        self.SetExternalTriggerTermination.restype = ctypes.c_uint
        
        self.SetFanMode.argtypes=[ctypes.c_int]
        self.SetFanMode.restype = ctypes.c_uint
        
        self.SetFastExtTrigger.argtypes=[ctypes.c_int]
        self.SetFastExtTrigger.restype = ctypes.c_uint
        
        self.SetFastKinetics.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_float, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetFastKinetics.restype = ctypes.c_uint
        
        self.SetFastKineticsEx.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_float, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetFastKineticsEx.restype = ctypes.c_uint
        
        self.SetFastKineticsStorageMode.argtypes=[ctypes.c_int]
        self.SetFastKineticsStorageMode.restype = ctypes.c_uint
        
        self.SetFastKineticsTimeScanMode.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetFastKineticsTimeScanMode.restype = ctypes.c_uint
        
        self.SetFilterMode.argtypes=[ctypes.c_int]
        self.SetFilterMode.restype = ctypes.c_uint
        
        self.SetFilterParameters.argtypes=[ctypes.c_int, ctypes.c_float, ctypes.c_int, ctypes.c_float, ctypes.c_int, ctypes.c_int]
        self.SetFilterParameters.restype = ctypes.c_uint
        
        self.SetFKVShiftSpeed.argtypes=[ctypes.c_int]
        self.SetFKVShiftSpeed.restype = ctypes.c_uint
        
        self.SetFPDP.argtypes=[ctypes.c_int]
        self.SetFPDP.restype = ctypes.c_uint
        
        self.SetFrameTransferMode.argtypes=[ctypes.c_int]
        self.SetFrameTransferMode.restype = ctypes.c_uint
        
        self.SetFrontEndEvent.restype = ctypes.c_uint
        
        self.SetFullImage.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetFullImage.restype = ctypes.c_uint
        
        self.SetFVBHBin.argtypes=[ctypes.c_int]
        self.SetFVBHBin.restype = ctypes.c_uint
        
        self.SetGain.argtypes=[ctypes.c_int]
        self.SetGain.restype = ctypes.c_uint
        
        self.SetGate.argtypes=[ctypes.c_float, ctypes.c_float, ctypes.c_float]
        self.SetGate.restype = ctypes.c_uint
        
        self.SetGateMode.argtypes=[ctypes.c_int]
        self.SetGateMode.restype = ctypes.c_uint
        
        self.SetHighCapacity.argtypes=[ctypes.c_int]
        self.SetHighCapacity.restype = ctypes.c_uint
        
        self.SetHorizontalSpeed.argtypes=[ctypes.c_int]
        self.SetHorizontalSpeed.restype = ctypes.c_uint
        
        self.SetHSSpeed.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetHSSpeed.restype = ctypes.c_uint
        
        self.SetImage.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetImage.restype = ctypes.c_uint
        
        self.SetImageFlip.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetImageFlip.restype = ctypes.c_uint
        
        self.SetImageRotate.argtypes=[ctypes.c_int]
        self.SetImageRotate.restype = ctypes.c_uint
        
        self.SetIsolatedCropMode.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetIsolatedCropMode.restype = ctypes.c_uint
        
        self.SetIsolatedCropModeEx.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetIsolatedCropModeEx.restype = ctypes.c_uint
        
        self.SetIsolatedCropModeType.argtypes=[ctypes.c_int]
        self.SetIsolatedCropModeType.restype = ctypes.c_uint
        
        self.SetKineticCycleTime.argtypes=[ctypes.c_float]
        self.SetKineticCycleTime.restype = ctypes.c_uint
        
        self.SetMCPGain.argtypes=[ctypes.c_int]
        self.SetMCPGain.restype = ctypes.c_uint
        
        self.SetMCPGating.argtypes=[ctypes.c_int]
        self.SetMCPGating.restype = ctypes.c_uint
        
        self.SetMessageWindow.restype = ctypes.c_uint
        
        self.SetMetaData.argtypes=[ctypes.c_int]
        self.SetMetaData.restype = ctypes.c_uint
        
        self.SetMultiTrack.restype = ctypes.c_uint
        
        self.SetMultiTrackHBin.argtypes=[ctypes.c_int]
        self.SetMultiTrackHBin.restype = ctypes.c_uint
        
        self.SetMultiTrackHRange.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetMultiTrackHRange.restype = ctypes.c_uint
        
        self.SetMultiTrackScan.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetMultiTrackScan.restype = ctypes.c_uint
        
        self.SetNextAddress.restype = ctypes.c_uint
        
        self.SetNextAddress16.restype = ctypes.c_uint
        
        self.SetNumberAccumulations.argtypes=[ctypes.c_int]
        self.SetNumberAccumulations.restype = ctypes.c_uint
        
        self.SetNumberKinetics.argtypes=[ctypes.c_int]
        self.SetNumberKinetics.restype = ctypes.c_uint
        
        self.SetNumberPrescans.argtypes=[ctypes.c_int]
        self.SetNumberPrescans.restype = ctypes.c_uint
        
        self.SetOutputAmplifier.argtypes=[ctypes.c_int]
        self.SetOutputAmplifier.restype = ctypes.c_uint
        
        self.SetOverlapMode.argtypes=[ctypes.c_int]
        self.SetOverlapMode.restype = ctypes.c_uint
        
        self.SetOverTempEvent.restype = ctypes.c_uint
        
        self.SetPCIMode.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetPCIMode.restype = ctypes.c_uint
        
        self.SetPhotonCounting.argtypes=[ctypes.c_int]
        self.SetPhotonCounting.restype = ctypes.c_uint
        
        self.SetPhotonCountingThreshold.argtypes=[ctypes.c_long, ctypes.c_long]
        self.SetPhotonCountingThreshold.restype = ctypes.c_uint
        
        self.SetPhosphorEvent.restype = ctypes.c_uint
        
        self.SetPhotonCountingDivisions.restype = ctypes.c_uint
        
        self.SetPixelMode.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetPixelMode.restype = ctypes.c_uint
        
        self.SetPreAmpGain.argtypes=[ctypes.c_int]
        self.SetPreAmpGain.restype = ctypes.c_uint
        
        self.SetDualExposureTimes.argtypes=[ctypes.c_float, ctypes.c_float]
        self.SetDualExposureTimes.restype = ctypes.c_uint
        
        self.SetDualExposureMode.argtypes=[ctypes.c_int]
        self.SetDualExposureMode.restype = ctypes.c_uint
        
        self.SetRandomTracks.restype = ctypes.c_uint
        
        self.SetReadMode.argtypes=[ctypes.c_int]
        self.SetReadMode.restype = ctypes.c_uint
        
        self.SetReadoutRegisterPacking.argtypes=[ctypes.c_uint]
        self.SetReadoutRegisterPacking.restype = ctypes.c_uint
        
        self.SetRegisterDump.argtypes=[ctypes.c_int]
        self.SetRegisterDump.restype = ctypes.c_uint
        
        self.SetRingExposureTimes.restype = ctypes.c_uint
        
        self.SetSaturationEvent.restype = ctypes.c_uint
        
        self.SetShutter.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetShutter.restype = ctypes.c_uint
        
        self.SetShutterEx.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetShutterEx.restype = ctypes.c_uint
        
        self.SetShutters.argtypes=[ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int]
        self.SetShutters.restype = ctypes.c_uint
        
        self.SetSifComment.restype = ctypes.c_uint
        
        self.SetSingleTrack.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetSingleTrack.restype = ctypes.c_uint
        
        self.SetSingleTrackHBin.argtypes=[ctypes.c_int]
        self.SetSingleTrackHBin.restype = ctypes.c_uint
        
        self.SetSpool.restype = ctypes.c_uint
        
        self.SetSpoolThreadCount.argtypes=[ctypes.c_int]
        self.SetSpoolThreadCount.restype = ctypes.c_uint
        
        self.SetStorageMode.argtypes=[ctypes.c_long]
        self.SetStorageMode.restype = ctypes.c_uint
        
        self.SetTECEvent.restype = ctypes.c_uint
        
        self.SetTemperature.argtypes=[ctypes.c_int]
        self.SetTemperature.restype = ctypes.c_uint
        
        self.SetTemperatureEvent.restype = ctypes.c_uint
        
        self.SetTriggerMode.argtypes=[ctypes.c_int]
        self.SetTriggerMode.restype = ctypes.c_uint
        
        self.SetTriggerInvert.argtypes=[ctypes.c_int]
        self.SetTriggerInvert.restype = ctypes.c_uint
        
        self.GetTriggerLevelRange.restype = ctypes.c_uint
        
        self.SetTriggerLevel.argtypes=[ctypes.c_float]
        self.SetTriggerLevel.restype = ctypes.c_uint
        
        self.SetIODirection.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetIODirection.restype = ctypes.c_uint
        
        self.SetIOLevel.argtypes=[ctypes.c_int, ctypes.c_int]
        self.SetIOLevel.restype = ctypes.c_uint
        
        self.SetUserEvent.restype = ctypes.c_uint
        
        self.SetUSGenomics.argtypes=[ctypes.c_long, ctypes.c_long]
        self.SetUSGenomics.restype = ctypes.c_uint
        
        self.SetVerticalRowBuffer.argtypes=[ctypes.c_int]
        self.SetVerticalRowBuffer.restype = ctypes.c_uint
        
        self.SetVerticalSpeed.argtypes=[ctypes.c_int]
        self.SetVerticalSpeed.restype = ctypes.c_uint
        
        self.SetVirtualChip.argtypes=[ctypes.c_int]
        self.SetVirtualChip.restype = ctypes.c_uint
        
        self.SetVSAmplitude.argtypes=[ctypes.c_int]
        self.SetVSAmplitude.restype = ctypes.c_uint
        
        self.SetVSSpeed.argtypes=[ctypes.c_int]
        self.SetVSSpeed.restype = ctypes.c_uint
        
        self.ShutDown.argtypes=[]
        self.ShutDown.restype = ctypes.c_uint
        
        self.StartAcquisition.argtypes=[]
        self.StartAcquisition.restype = ctypes.c_uint
        
        self.UnMapPhysicalAddress.argtypes=[]
        self.UnMapPhysicalAddress.restype = ctypes.c_uint
        
        self.UpdateDDGTimings.argtypes=[]
        self.UpdateDDGTimings.restype = ctypes.c_uint
        
        self.WaitForAcquisition.argtypes=[]
        self.WaitForAcquisition.restype = ctypes.c_uint
        
        self.WaitForAcquisitionByHandle.argtypes=[ctypes.c_long]
        self.WaitForAcquisitionByHandle.restype = ctypes.c_uint
        
        self.WaitForAcquisitionByHandleTimeOut.argtypes=[ctypes.c_long, ctypes.c_int]
        self.WaitForAcquisitionByHandleTimeOut.restype = ctypes.c_uint
        
        self.WaitForAcquisitionTimeOut.argtypes=[ctypes.c_int]
        self.WaitForAcquisitionTimeOut.restype = ctypes.c_uint
        
        self.WhiteBalance.restype = ctypes.c_uint
        
        self.OA_Initialize.restype = ctypes.c_uint
        
        self.OA_IsPreSetModeAvailable.restype = ctypes.c_uint
        
        self.OA_EnableMode.restype = ctypes.c_uint
        
        self.OA_GetModeAcqParams.restype = ctypes.c_uint
        
        self.OA_GetUserModeNames.restype = ctypes.c_uint
        
        self.OA_GetPreSetModeNames.restype = ctypes.c_uint
        
        self.OA_GetNumberOfUserModes.restype = ctypes.c_uint
        
        self.OA_GetNumberOfPreSetModes.restype = ctypes.c_uint
        
        self.OA_GetNumberOfAcqParams.restype = ctypes.c_uint
        
        self.OA_AddMode.restype = ctypes.c_uint
        
        self.OA_WriteToFile.restype = ctypes.c_uint
        
        self.OA_DeleteMode.restype = ctypes.c_uint
        
        self.OA_SetInt.restype = ctypes.c_uint
        
        self.OA_SetFloat.restype = ctypes.c_uint
        
        self.OA_SetString.restype = ctypes.c_uint
        
        self.OA_GetInt.restype = ctypes.c_uint
        
        self.OA_GetFloat.restype = ctypes.c_uint
        
        self.OA_GetString.restype = ctypes.c_uint
        
        self.Filter_SetMode.argtypes=[ctypes.c_uint]
        self.Filter_SetMode.restype = ctypes.c_uint
        
        self.Filter_GetMode.restype = ctypes.c_uint
        
        self.Filter_SetThreshold.argtypes=[ctypes.c_float]
        self.Filter_SetThreshold.restype = ctypes.c_uint
        
        self.Filter_GetThreshold.restype = ctypes.c_uint
        
        self.Filter_SetDataAveragingMode.argtypes=[ctypes.c_int]
        self.Filter_SetDataAveragingMode.restype = ctypes.c_uint
        
        self.Filter_GetDataAveragingMode.restype = ctypes.c_uint
        
        self.Filter_SetAveragingFrameCount.argtypes=[ctypes.c_int]
        self.Filter_SetAveragingFrameCount.restype = ctypes.c_uint
        
        self.Filter_GetAveragingFrameCount.restype = ctypes.c_uint
        
        self.Filter_SetAveragingFactor.argtypes=[ctypes.c_int]
        self.Filter_SetAveragingFactor.restype = ctypes.c_uint
        
        self.Filter_GetAveragingFactor.restype = ctypes.c_uint
        
        self.PostProcessNoiseFilter.restype = ctypes.c_uint
        
        self.PostProcessCountConvert.restype = ctypes.c_uint
        
        self.PostProcessPhotonCounting.restype = ctypes.c_uint
        
        self.PostProcessDataAveraging.restype = ctypes.c_uint

DRV_ERROR_CODES = 20001
DRV_SUCCESS = 20002
DRV_VXDNOTINSTALLED = 20003
DRV_ERROR_SCAN = 20004
DRV_ERROR_CHECK_SUM = 20005
DRV_ERROR_FILELOAD = 20006
DRV_UNKNOWN_FUNCTION = 20007
DRV_ERROR_VXD_INIT = 20008
DRV_ERROR_ADDRESS = 20009
DRV_ERROR_PAGELOCK = 20010
DRV_ERROR_PAGEUNLOCK = 20011
DRV_ERROR_BOARDTEST = 20012
DRV_ERROR_ACK = 20013
DRV_ERROR_UP_FIFO = 20014
DRV_ERROR_PATTERN = 20015
DRV_ACQUISITION_ERRORS = 20017
DRV_ACQ_BUFFER = 20018
DRV_ACQ_DOWNFIFO_FULL = 20019
DRV_PROC_UNKONWN_INSTRUCTION = 20020
DRV_ILLEGAL_OP_CODE = 20021
DRV_KINETIC_TIME_NOT_MET = 20022
DRV_ACCUM_TIME_NOT_MET = 20023
DRV_NO_NEW_DATA = 20024
DRV_PCI_DMA_FAIL = 20025
DRV_SPOOLERROR = 20026
DRV_SPOOLSETUPERROR = 20027
DRV_FILESIZELIMITERROR = 20028
DRV_ERROR_FILESAVE = 20029
DRV_TEMPERATURE_CODES = 20033
DRV_TEMPERATURE_OFF = 20034
DRV_TEMPERATURE_NOT_STABILIZED = 20035
DRV_TEMPERATURE_STABILIZED = 20036
DRV_TEMPERATURE_NOT_REACHED = 20037
DRV_TEMPERATURE_OUT_RANGE = 20038
DRV_TEMPERATURE_NOT_SUPPORTED = 20039
DRV_TEMPERATURE_DRIFT = 20040
DRV_TEMP_CODES = 20033
DRV_TEMP_OFF = 20034
DRV_TEMP_NOT_STABILIZED = 20035
DRV_TEMP_STABILIZED = 20036
DRV_TEMP_NOT_REACHED = 20037
DRV_TEMP_OUT_RANGE = 20038
DRV_TEMP_NOT_SUPPORTED = 20039
DRV_TEMP_DRIFT = 20040
DRV_GENERAL_ERRORS = 20049
DRV_INVALID_AUX = 20050
DRV_COF_NOTLOADED = 20051
DRV_FPGAPROG = 20052
DRV_FLEXERROR = 20053
DRV_GPIBERROR = 20054
DRV_EEPROMVERSIONERROR = 20055
DRV_DATATYPE = 20064
DRV_DRIVER_ERRORS = 20065
DRV_P1INVALID = 20066
DRV_P2INVALID = 20067
DRV_P3INVALID = 20068
DRV_P4INVALID = 20069
DRV_INIERROR = 20070
DRV_COFERROR = 20071
DRV_ACQUIRING = 20072
DRV_IDLE = 20073
DRV_TEMPCYCLE = 20074
DRV_NOT_INITIALIZED = 20075
DRV_P5INVALID = 20076
DRV_P6INVALID = 20077
DRV_INVALID_MODE = 20078
DRV_INVALID_FILTER = 20079
DRV_I2CERRORS = 20080
DRV_I2CDEVNOTFOUND = 20081
DRV_I2CTIMEOUT = 20082
DRV_P7INVALID = 20083
DRV_P8INVALID = 20084
DRV_P9INVALID = 20085
DRV_P10INVALID = 20086
DRV_P11INVALID = 20087
DRV_USBERROR = 20089
DRV_IOCERROR = 20090
DRV_VRMVERSIONERROR = 20091
DRV_GATESTEPERROR = 20092
DRV_USB_INTERRUPT_ENDPOINT_ERROR = 20093
DRV_RANDOM_TRACK_ERROR = 20094
DRV_INVALID_TRIGGER_MODE = 20095
DRV_LOAD_FIRMWARE_ERROR = 20096
DRV_DIVIDE_BY_ZERO_ERROR = 20097
DRV_INVALID_RINGEXPOSURES = 20098
DRV_BINNING_ERROR = 20099
DRV_INVALID_AMPLIFIER = 20100
DRV_INVALID_COUNTCONVERT_MODE = 20101
DRV_USB_INTERRUPT_ENDPOINT_TIMEOUT = 20102
DRV_ERROR_NOCAMERA = 20990
DRV_NOT_SUPPORTED = 20991
DRV_NOT_AVAILABLE = 20992
DRV_ERROR_MAP = 20115
DRV_ERROR_UNMAP = 20116
DRV_ERROR_MDL = 20117
DRV_ERROR_UNMDL = 20118
DRV_ERROR_BUFFSIZE = 20119
DRV_ERROR_NOHANDLE = 20121
DRV_GATING_NOT_AVAILABLE = 20130
DRV_FPGA_VOLTAGE_ERROR = 20131
DRV_OW_CMD_FAIL = 20150
DRV_OWMEMORY_BAD_ADDR = 20151
DRV_OWCMD_NOT_AVAILABLE = 20152
DRV_OW_NO_SLAVES = 20153
DRV_OW_NOT_INITIALIZED = 20154
DRV_OW_ERROR_SLAVE_NUM = 20155
DRV_MSTIMINGS_ERROR = 20156
DRV_OA_NULL_ERROR = 20173
DRV_OA_PARSE_DTD_ERROR = 20174
DRV_OA_DTD_VALIDATE_ERROR = 20175
DRV_OA_FILE_ACCESS_ERROR = 20176
DRV_OA_FILE_DOES_NOT_EXIST = 20177
DRV_OA_XML_INVALID_OR_NOT_FOUND_ERROR = 20178
DRV_OA_PRESET_FILE_NOT_LOADED = 20179
DRV_OA_USER_FILE_NOT_LOADED = 20180
DRV_OA_PRESET_AND_USER_FILE_NOT_LOADED = 20181
DRV_OA_INVALID_FILE = 20182
DRV_OA_FILE_HAS_BEEN_MODIFIED = 20183
DRV_OA_BUFFER_FULL = 20184
DRV_OA_INVALID_STRING_LENGTH = 20185
DRV_OA_INVALID_CHARS_IN_NAME = 20186
DRV_OA_INVALID_NAMING = 20187
DRV_OA_GET_CAMERA_ERROR = 20188
DRV_OA_MODE_ALREADY_EXISTS = 20189
DRV_OA_STRINGS_NOT_EQUAL = 20190
DRV_OA_NO_USER_DATA = 20191
DRV_OA_VALUE_NOT_SUPPORTED = 20192
DRV_OA_MODE_DOES_NOT_EXIST = 20193
DRV_OA_CAMERA_NOT_SUPPORTED = 20194
DRV_OA_FAILED_TO_GET_MODE = 20195
DRV_OA_CAMERA_NOT_AVAILABLE = 20196
DRV_PROCESSING_FAILED = 20211
AC_ACQMODE_SINGLE = 1
AC_ACQMODE_VIDEO = 2
AC_ACQMODE_ACCUMULATE = 4
AC_ACQMODE_KINETIC = 8
AC_ACQMODE_FRAMETRANSFER = 16
AC_ACQMODE_FASTKINETICS = 32
AC_ACQMODE_OVERLAP = 64
AC_ACQMODE_TDI = 0x80
AC_READMODE_FULLIMAGE = 1
AC_READMODE_SUBIMAGE = 2
AC_READMODE_SINGLETRACK = 4
AC_READMODE_FVB = 8
AC_READMODE_MULTITRACK = 16
AC_READMODE_RANDOMTRACK = 32
AC_READMODE_MULTITRACKSCAN = 64
AC_TRIGGERMODE_INTERNAL = 1
AC_TRIGGERMODE_EXTERNAL = 2
AC_TRIGGERMODE_EXTERNAL_FVB_EM = 4
AC_TRIGGERMODE_CONTINUOUS = 8
AC_TRIGGERMODE_EXTERNALSTART = 16
AC_TRIGGERMODE_EXTERNALEXPOSURE = 32
AC_TRIGGERMODE_INVERTED = 0x40
AC_TRIGGERMODE_EXTERNAL_CHARGESHIFTING = 0x80
AC_TRIGGERMODE_EXTERNAL_RISING = 0x0100
AC_TRIGGERMODE_EXTERNAL_PURGE = 0x0200
AC_TRIGGERMODE_BULB = 32
AC_CAMERATYPE_PDA = 0
AC_CAMERATYPE_IXON = 1
AC_CAMERATYPE_ICCD = 2
AC_CAMERATYPE_EMCCD = 3
AC_CAMERATYPE_CCD = 4
AC_CAMERATYPE_ISTAR = 5
AC_CAMERATYPE_VIDEO = 6
AC_CAMERATYPE_IDUS = 7
AC_CAMERATYPE_NEWTON = 8
AC_CAMERATYPE_SURCAM = 9
AC_CAMERATYPE_USBICCD = 10
AC_CAMERATYPE_LUCA = 11
AC_CAMERATYPE_RESERVED = 12
AC_CAMERATYPE_IKON = 13
AC_CAMERATYPE_INGAAS = 14
AC_CAMERATYPE_IVAC = 15
AC_CAMERATYPE_UNPROGRAMMED = 16
AC_CAMERATYPE_CLARA = 17
AC_CAMERATYPE_USBISTAR = 18
AC_CAMERATYPE_SIMCAM = 19
AC_CAMERATYPE_NEO = 20
AC_CAMERATYPE_IXONULTRA = 21
AC_CAMERATYPE_VOLMOS = 22
AC_CAMERATYPE_IVAC_CCD = 23
AC_CAMERATYPE_ASPEN = 24
AC_CAMERATYPE_ASCENT = 25
AC_CAMERATYPE_ALTA = 26
AC_CAMERATYPE_ALTAF = 27
AC_CAMERATYPE_IKONXL = 28
AC_CAMERATYPE_CMOS_GEN2 = 29
AC_CAMERATYPE_ISTAR_SCMOS = 30
AC_CAMERATYPE_IKONLR = 31
AC_PIXELMODE_8BIT = 1
AC_PIXELMODE_14BIT = 2
AC_PIXELMODE_16BIT = 4
AC_PIXELMODE_32BIT = 8
AC_PIXELMODE_MONO = 0x000000
AC_PIXELMODE_RGB = 0x010000
AC_PIXELMODE_CMY = 0x020000
AC_SETFUNCTION_VREADOUT = 0x01
AC_SETFUNCTION_HREADOUT = 0x02
AC_SETFUNCTION_TEMPERATURE = 0x04
AC_SETFUNCTION_MCPGAIN = 0x08
AC_SETFUNCTION_EMCCDGAIN = 0x10
AC_SETFUNCTION_BASELINECLAMP = 0x20
AC_SETFUNCTION_VSAMPLITUDE = 0x40
AC_SETFUNCTION_HIGHCAPACITY = 0x80
AC_SETFUNCTION_BASELINEOFFSET = 0x0100
AC_SETFUNCTION_PREAMPGAIN = 0x0200
AC_SETFUNCTION_CROPMODE = 0x0400
AC_SETFUNCTION_DMAPARAMETERS = 0x0800
AC_SETFUNCTION_HORIZONTALBIN = 0x1000
AC_SETFUNCTION_MULTITRACKHRANGE = 0x2000
AC_SETFUNCTION_RANDOMTRACKNOGAPS = 0x4000
AC_SETFUNCTION_EMADVANCED = 0x8000
AC_SETFUNCTION_GATEMODE = 0x010000
AC_SETFUNCTION_DDGTIMES = 0x020000
AC_SETFUNCTION_IOC = 0x040000
AC_SETFUNCTION_INTELLIGATE = 0x080000
AC_SETFUNCTION_INSERTION_DELAY = 0x100000
AC_SETFUNCTION_GATESTEP = 0x200000
AC_SETFUNCTION_GATEDELAYSTEP = 0x200000
AC_SETFUNCTION_TRIGGERTERMINATION = 0x400000
AC_SETFUNCTION_EXTENDEDNIR = 0x800000
AC_SETFUNCTION_SPOOLTHREADCOUNT = 0x1000000
AC_SETFUNCTION_REGISTERPACK = 0x2000000
AC_SETFUNCTION_PRESCANS = 0x4000000
AC_SETFUNCTION_GATEWIDTHSTEP = 0x8000000
AC_SETFUNCTION_EXTENDED_CROP_MODE = 0x10000000
AC_SETFUNCTION_SUPERKINETICS = 0x20000000
AC_SETFUNCTION_TIMESCAN = 0x40000000
AC_SETFUNCTION_CROPMODETYPE = 0x80000000
AC_SETFUNCTION_GAIN = 8
AC_SETFUNCTION_ICCDGAIN = 8
AC_GETFUNCTION_TEMPERATURE = 0x01
AC_GETFUNCTION_TARGETTEMPERATURE = 0x02
AC_GETFUNCTION_TEMPERATURERANGE = 0x04
AC_GETFUNCTION_DETECTORSIZE = 0x08
AC_GETFUNCTION_MCPGAIN = 0x10
AC_GETFUNCTION_EMCCDGAIN = 0x20
AC_GETFUNCTION_HVFLAG = 0x40
AC_GETFUNCTION_GATEMODE = 0x80
AC_GETFUNCTION_DDGTIMES = 0x0100
AC_GETFUNCTION_IOC = 0x0200
AC_GETFUNCTION_INTELLIGATE = 0x0400
AC_GETFUNCTION_INSERTION_DELAY = 0x0800
AC_GETFUNCTION_GATESTEP = 0x1000
AC_GETFUNCTION_GATEDELAYSTEP = 0x1000
AC_GETFUNCTION_PHOSPHORSTATUS = 0x2000
AC_GETFUNCTION_MCPGAINTABLE = 0x4000
AC_GETFUNCTION_BASELINECLAMP = 0x8000
AC_GETFUNCTION_GATEWIDTHSTEP = 0x10000
AC_GETFUNCTION_GAIN = 0x10
AC_GETFUNCTION_ICCDGAIN = 0x10
AC_FEATURES_POLLING = 1
AC_FEATURES_EVENTS = 2
AC_FEATURES_SPOOLING = 4
AC_FEATURES_SHUTTER = 8
AC_FEATURES_SHUTTEREX = 16
AC_FEATURES_EXTERNAL_I2C = 32
AC_FEATURES_SATURATIONEVENT = 64
AC_FEATURES_FANCONTROL = 128
AC_FEATURES_MIDFANCONTROL = 256
AC_FEATURES_TEMPERATUREDURINGACQUISITION = 512
AC_FEATURES_KEEPCLEANCONTROL = 1024
AC_FEATURES_DDGLITE = 0x0800
AC_FEATURES_FTEXTERNALEXPOSURE = 0x1000
AC_FEATURES_KINETICEXTERNALEXPOSURE = 0x2000
AC_FEATURES_DACCONTROL = 0x4000
AC_FEATURES_METADATA = 0x8000
AC_FEATURES_IOCONTROL = 0x10000
AC_FEATURES_PHOTONCOUNTING = 0x20000
AC_FEATURES_COUNTCONVERT = 0x40000
AC_FEATURES_DUALMODE = 0x80000
AC_FEATURES_OPTACQUIRE = 0x100000
AC_FEATURES_REALTIMESPURIOUSNOISEFILTER = 0x200000
AC_FEATURES_POSTPROCESSSPURIOUSNOISEFILTER = 0x400000
AC_FEATURES_DUALPREAMPGAIN = 0x800000
AC_FEATURES_DEFECT_CORRECTION = 0x1000000
AC_FEATURES_STARTOFEXPOSURE_EVENT = 0x2000000
AC_FEATURES_ENDOFEXPOSURE_EVENT = 0x4000000
AC_FEATURES_CAMERALINK = 0x8000000
AC_FEATURES_FIFOFULL_EVENT = 0x10000000
AC_FEATURES_SENSOR_PORT_CONFIGURATION = 0x20000000
AC_FEATURES_SENSOR_COMPENSATION = 0x40000000
AC_FEATURES_IRIG_SUPPORT = 0x80000000
AC_EMGAIN_8BIT = 1
AC_EMGAIN_12BIT = 2
AC_EMGAIN_LINEAR12 = 4
AC_EMGAIN_REAL12 = 8
AC_FEATURES2_ESD_EVENTS = 1
AC_FEATURES2_DUAL_PORT_CONFIGURATION = 2
AC_FEATURES2_OVERTEMP_EVENTS = 4
